[WWDC18][iOS 12] ローカル通知をグループ化する #WWDC18
はじめに
こんにちは。モバイルアプリサービス部の平屋です。
本記事では、ローカル通知をグループ化する実装を紹介します。
本記事は Apple からベータ版として公開されているドキュメントを情報源としています。 そのため、正式版と異なる情報になる可能性があります。ご留意の上、お読みください。
検証環境
本記事は以下の環境で検証を行っています。
- macOS Sierra 10.13.4
- Xcode Version 10.0 beta (10L176w)
- iOS Deployment Target: 12.0
実装
さっそく実装を紹介していきます。
グループ化に対応したローカル通知を作成する
こちらの記事と同様の手順でローカル通知を作成します。
ただし、グループ化したい通知に同じスレッドIDを指定します。これによって通知がグループ化されます。
let content = UNMutableNotificationContent() content.body = "Notification with threadId" content.threadIdentifier = "thread-id-1" // <- スレッドIDを指定する let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 1, repeats: false) let request = UNNotificationRequest(identifier: body, content: content, trigger: trigger) UNUserNotificationCenter.current().add(request)
グループの概要を設定する
通知のカテゴリを使用すれば、通知のグループに概要を設定できます。
まずは通知カテゴリの作成と登録を行います。
categorySummaryFormat
引数には概要のフォーマット文字列を指定します。%u
には通知の件数が、%@
にはUNMutableNotificationContentのsummaryArgument
に指定する文字列が入ります。
let category = UNNotificationCategory(identifier: "category-id-1", actions: [], intentIdentifiers: [], hiddenPreviewsBodyPlaceholder: nil, categorySummaryFormat: "%u more messages. threadID is %@.", options: []) UNUserNotificationCenter.current().setNotificationCategories([category])
そしてローカル通知を作成します。
UNMutableNotificationContentのsummaryArgument
に文字列を、categoryIdentifier
に通知カテゴリのIDを指定します。
let content = UNMutableNotificationContent() content.summaryArgument = "thread-id-1" // <- 概要のフォーマット文字列に埋め込みたい文字列を指定 content.categoryIdentifier = "category-id-1" // <- カテゴリIDを指定 // ... UNUserNotificationCenter.current().add(request)
さいごに
本記事では、ローカル通知をグループ化する実装を紹介しました。
次回はリモート通知のグループ化の実装を紹介しようかなと思います。